#pragma once
#include "Common.h"
#include "CentralCach.h"

class ThreadCach {
public:
    //申请和释放内存对象
    void* Allocate(size_t size);
    void  DeAllocate(void* ptr, size_t size);
    void* ToCentralCache(const size_t& index, const size_t& size);
    void  ListTooLong(FreeList& list, size_t size);
private:
    FreeList freeList_[NFREELIST];
    //可以记录这个threadCach的总空间大小(已分配和未分配), 当超过某个阈值时,向CentralCach归还未使用的内存块
    //size_t SumBytes = 0;
};

/*
线程局部存储（TLS），是一种变量的存储方法，
这个变量在它所在的线程内是全局可访问的，但是不能被其他线程访问到，
这样就保持了数据的线程独立性。而熟知的全局变量，是所有线程都可以访问的，
这样就不可避免需要锁来控制，增加了控制成本和代码复杂度。
*/
#ifdef __linux__
static __thread ThreadCach* pTlsThreadCach = nullptr;
#else
static __declspec(thread) ThreadCach* pTlsThreadCach = nullptr;
#endif

